package com.sybil.spa.dao;

import com.sybil.spa.dominio.Reembolso;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

@Repository("reembolsoDAO")
public class ReembolsoDAO extends AbstractDAO<Reembolso, Integer> {

   public ReembolsoDAO() {
      super(Reembolso.class);
   }

   public Reembolso getReembolso(Integer numero) {
      return obtener(numero);
   }

   public List<Reembolso> getReembolsos(boolean activos) {
      if (activos) {
         return obtener(Restrictions.eq("estatus", "A"));
      } else {
         return obtener();
      }
   }

   public void guardarReembolso(Reembolso reembolso) {
      guardar(reembolso);
   }

   public void editarReembolso(Reembolso reembolso) {
      editar(reembolso);
   }

   public void eliminarReembolso(Reembolso reembolso) {
      eliminar(reembolso);
   }

   public List<Reembolso> getReembolsos(Date fechaDesde, Date fechaHasta, String estatus, int numero) {
      Criteria c = getCriteria();
      if (numero != 0) {
         c.add(Restrictions.eq("numero", numero));
      }
      if (estatus != null && !"T".equals(estatus)) {
         c.add(Restrictions.eq("estatus", estatus));
      }
      if (fechaDesde != null && fechaHasta != null) {
         c.add(Restrictions.between("fecha", fechaDesde, fechaHasta));
      }
      c.addOrder(Order.desc("numero"));
      return c.list();
   }

   public Integer getSecuencia() {
      Integer siguiente = 0;
      Query query = sesionActual().getNamedQuery("Reembolso.maxReembolso");
      List list = query.list();
      Object get = list.get(0);
      if (get != null) {
         siguiente = (Integer) list.get(0);
      }
      siguiente++;
      return siguiente;
   }
}
